#include <stdlib.h>
#include <stdio.h>
#include "element.h"
#include "Liste.h"
#include "ElementFile.h"

void initialise(Liste * l)
{
	l->prem=NULL;
	l->last=NULL;
}

int estVide(const Liste * l)
{
	if(l->prem==NULL)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

unsigned int nbElements(const Liste * l)
{
	int i=0;
	Cellule * C=l->prem;
	while (C != NULL)
	{
		i=i + 1;
		C=C->suivant;
	}
		return i;
}

void ajoutEnTete(Elem e,Liste * l)
{
	Cellule * tmp;
	tmp=(Cellule*)malloc(sizeof(Cellule));
	tmp->suivant=l->prem;
	if(estVide(l))
	{
		l->last=tmp;
	}
	else
	{
		(l->prem)->precedent=tmp;
	}
	tmp->precedent=NULL;
	tmp->info=e;
	l->prem=tmp;
}

void ajoutEnQueue(Elem e, Liste * l)
{
	if (estVide(l))
	{
		ajoutEnTete(e,l);
	} 
	else
	{
		Cellule * tmp;
		tmp=(Cellule*)malloc(sizeof(Cellule));
		tmp->precedent=l->last;
		tmp->suivant=NULL;
		tmp->info=e;
		(l->last)->suivant=tmp;
		l->last=tmp;
	}
}

void suppressionEnTete(Liste * l)
{
	if(l->prem != NULL)
	{
	Cellule * tmp=l->prem;
	l->prem=tmp->suivant;
	tmp->precedent=NULL;
	free(tmp);
	}
	if(estVide(l))
	{
		l->last=NULL;
	}
}

void videListe(Liste * l)
{
	while(l->prem != NULL)
	{
		suppressionEnTete(l);
	}
}

void testament(Liste * l)
{
	videListe(l);
}

void affichageListeGaucheDroite(const Liste * l)
{
	Cellule * C = l->prem;
	while(C != NULL)
	{
	afficherElem(C->info);
	C=C->suivant;
	}
}

void affichageListeDroiteGauche(const Liste * l)
{
	Cellule * C = l->last;
	while(C != NULL)
	{
	afficherElem(C->info);
	C=C->precedent;
	}
}
/*
void insererElement(Elem e, Liste * l, unsigned int position)
{
	
}*/


